<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="./index.js"></script>
    <title>Promise的基本使用</title>
</head>
<body>
    <h1>Promise的基本使用</h1>
    <script>
        const p1 = new Promise((resolve, reject) => {
            setTimeout(() => {
                 //resolve('ok');
                 reject('Error')
                 //throw 'throw'
            }, 100);
            //resolve('ok');
            //reject('Error')
            //throw 'throw'
        })
        console.log('promise', p1)

        const resultP1= p1.then(value=>{
            console.log('then-resolve',value) // then中的回调是异步执行的
        },reason=>{
            console.warn('then-rejected',reason)
            return 'i fail'
        }).then(val=>{throw 'myThrow'}).then(val=>{},reason=>{})
        console.log('resultP1', resultP1)
        p1.catch(reason =>{
            console.warn("catch",reason);
        })


        let pro1= new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve('OK')
            },100)
        })
        let pro2=Promise.reject('OH yeah');
        let pro3=Promise.resolve('Success');        
        let raceResult= Promise.race([pro1,pro2,pro3]); //race的使用
        console.log("RaceResult:",raceResult);
        let allResult= Promise.all([pro1,pro2,pro3]); //all的使用
        console.log("allResult:",allResult);


        async function main(){ 
            //1.使用 async 修饰的方法，返回的结果是一个promise对象
            //2.promise对象的状态，由返回的内容决定的
                //1.返回值为非promise对象，则返回的promise 的状态为成功
                //2.返回的值为promise对象，直接返回这个对象
        }
        //3种情况
        main();

        // await
        // 1. 只能在 async修饰的方法内使用
        // 2. await 右侧的表达式一般为 promise对象， 则返回这个对象的成功的值,如果这个promise对象是失败的状态，则报异常，需要使用try catch
        // 3. 如果右侧不是promise对象，则直接返回这个内容

    </script>
</body>
</html>